草庐IT

Android AsyncTask 内存泄漏

全部标签

c++ - 使用 memcpy 复制数组的一部分,以及其他内存操作工具

是否可以使用memcpy复制数组的一部分?例如,我们有一个包含10个整数的数组。我们可以创建一个新数组,并将最后5个整数复制到其中吗?是否有其他可用于c/c++的内存/数组复制/操作工具? 最佳答案 Isitpossibletousememcpytocopypartofanarray?不,一般情况下是不可能的。只有当数组中元素的类型是普通布局时,您才能这样做。Sayforexamplewehaveanarrayof10integers.Canwecreateanewarray,andcopythelast5integersintoi

C++ 内存测试返回奇怪的输出

这里是Slackware。我只是在摆弄内存和指针......我想更多地了解这些,所以我用C++创建了一个数组,并查找了其中第一项的内存地址......:stringfoo[3]={"a","b","c"};cout它输出了这个:http://pastebin.com/K0HAL5nJ完整代码:#includeusingnamespacestd;intmain(){stringfoo[3]={"a","b","c"};cout我是C++的完全初学者,完全不明白为什么会发生这种情况……我知道这种代码不应该……是,但是,有人能解释一下那里发生了什么吗? 最佳答案

c++ - 你如何处理内存管理和信号/插槽?

我有一个对象,它用一个对象发出信号:MyObj*obj=this->generateObj();emitnewObjSignal(obj);deleteobj;我有一个或多个人与此有联系。问题是删除调用在对象接收到信号之前被调用。我该如何处理? 最佳答案 使用智能指针,这样内存管理将自动处理,您将确信您将拥有:没有悬挂指针;没有内存泄漏。在这种情况下,在我看来std::shared_ptr(或std::tr1::shared_ptr或boost::shared_ptr,如果您不使用C++11)是正确的选择:#include//For

c++ - 临时字符串的内存分配

我有一个关于字符串的问题,或者特别是关于字符串使用的内存的问题。我正在使用MSVC2010。考虑这段代码:voidTest(){LPWCSTRString=L"Testing";PrintString(String);}voidPrintString(LPWCSTRString){//printStringtoconsoleorsimilar}以这种方式创建和使用字符串是否安全?当字符串超出范围时,是否释放了为存储字符串分配的内存? 最佳答案 是的,它是安全的,但实际上没有分配;)L"Testing"将保留在您的exe文件的只读部分

c++ - 使用 malloc() 为 const char 字符串动态分配内存

我正在编写一个程序,它从.ini文件中读取一个值,然后将该值传递给一个接受PCSTR(即constchar*)的函数。函数是getaddrinfo()。所以,我想写PCSTRReadFromIni()。要返回常量字符串,我计划使用malloc()分配内存并将内存转换为常量字符串。我将能够获得从.ini文件中读取的确切字符数。这种技术可以吗?我真的不知道还能做什么。以下示例在VisualStudio2013中运行良好,并根据需要打印出“hello”。constchar*m(){char*c=(char*)malloc(6*sizeof(char));c="hello";return(co

c++ - x86、C++、gcc 和内存对齐

我有这个简单的C++代码:inttestFunction(int*input,longlength){intsum=0;for(longi=0;i#includeusingnamespacestd;intmain(){union{int*input;char*cinput;};size_tlength=1024;input=newint[length];//cinput++;cout如果我用带有-O3的g++4.9.2编译它,它运行良好。我预计,如果我取消对倒数第二行的注释,它会运行得更慢,但它会因SIGSEGV而彻底崩溃。ProgramreceivedsignalSIGSEGV,Se

c++ - 删除调用内存集?

为什么在deletethis;之后的调用栈中调用了下面的函数?msvcr110d.dll!_VEC_memset(void*dst,intval,intlen)请注意operatordelete没有重载。 最佳答案 在MicrosoftC/C++运行时库的调试版本中,delete使用memset将释放的内存设置为0xDD。这就是您在调用堆栈中看到memset的原因。您不会在发布版本中看到它。同样,当通过new分配内存时,新分配的内存将设置为0xCD。您可以在此处查看一些详细信息-https://msdn.microsoft.com/

c++ - new 不分配内存

这应该每秒用大约100MB填满我的内存。我使用gnome-systemmonitor和htop跟踪内存使用情况。但不知何故它没有。为什么?#include"unistd.h"#includeintmain(intargc,char*argv[]){while(true){std::cout运行:g++-std=c++11-O0main.cpp;./a.out 最佳答案 因为您没有使用它,所以Linux会进行惰性分配,因此在您使用它之前它不会实际映射任何内存页。如果你输入一些代码:char*test=newchar[100000000

c++ - 小 N 的 std::map 与 unordered_map 内存占用

对于内存使用比速度更重要的嵌入式系统应用程序,最好使用什么map容器?std::map,std::unordered_map?这适用于N小于一百的情况。如果实现很重要,那么我会关注libstdc++实现(GCC)。虽然我知道在内存使用方面不可能超过简单的数组,但我想避免使用具有O(N)性能的数据结构。因此,虽然我想减少内存占用,但我也希望查找速度合理(优于O(N))。我不关心其他操作(插入、删除),因为它们很少发生。如果我想自己测量内存使用情况,我应该如何在Linux平台上进行测量?会boost::flat_map适合作为占用空间小且查找时间优于O(n)的关联容器吗?

c++ - 堆栈内存未释放

我有以下循环,它从此处的实现中弹出我拥有的C++并发队列。https://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/while(!interrupted){pxDatadata=queue->pop();if(data.value==-1){break;//exitlooponterminatingcondition}usleep(7000);//stubtosimulateprocessing}我正在使用CentOS7中的系统监视器查看内存历史记录。从队列中读取值后,我试图释放队列占用的内存。但是,随着